// 基于support.js完成下面四个练习
// app.js
const fp = require('lodash/fp')
const { Maybe, Container } = require('./support')

// 1.使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
let maybe = Maybe.of([5, 6, 1])

let ex1 = (x) => {
    // 你需要实现的函数。。。
    return fp.map(fp.add(1), x)
}
console.log(maybe.map(ex1));
/* 方法二 */
// let ex1 = maybe.map(x => fp.map(fp.add(1), x))

// 2.实现一个函数ex2,能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do', 'ray', 'me', 'fa', 'so', 'la', 'ti', 'do'])
let ex2 = (x) => {
    // 你需要实现的函数。。。
    return fp.first(x)
}
console.log(xs.map(ex2));

// 3.实现一个函数ex3,使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function(x, o) {
    return Maybe.of(o[x])
})
let user = { id: 2, name: 'Albert' }
let ex3 = (x) => {
    // 你需要实现的函数
    return fp.first(x)
}

/**方法二 */
let ex33 = safeProp('name', user).map(fp.first)
console.log(safeProp('name', user).map(ex3));
console.log(ex33);

// 4.使用Maybe重写ex4,不要有if语句
let ex4 = function(n) {
    if (n) {
        return parseInt(n)
    }
}

let ex44 = n => Maybe.of(n).map(parseInt)
console.log(ex44('222'));